﻿#ifndef _DEMO_H_

#include <errno.h>
#include <memory.h>
#include <stdio.h>
#include <stdlib.h>
#ifndef _WIN32
#include "pthread.h"
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>

#include <openssl/crypto.h>
#include <openssl/err.h>
#include <openssl/pem.h>
#include <openssl/rsa.h>
#include <openssl/ssl.h>
#include <openssl/x509.h>
#else
// windows.h 中包含winsock2.h, 添加该宏可以避免重复包含winsock2.h
#define WIN32_LEAN_AND_MEAN
#include <queue>
#include <vector>
#include <mutex>
#include <thread>
#include <windows.h>
#include <iostream>
#include <openssl/bio.h>
#include <openssl/ssl3.h>
#include <openssl/err.h>
#endif

using namespace std;

class DemoService {
public:
    void *thread_main();

    // pthread_t pthreads_thread_id(void);

    void pthreads_locking_callback(int mode, int type, char *file,
                                   int line);

    int test();

	int free(SSL &ssl, SOCKET s);

private:
    // 条件变量用于线程间同步
    condition_variable cv;

    //
    // 互斥锁用于保护共享资源
    //
    mutex mtx;

    // 客户端套接字队列
    // 这里使用的是整数类型，实际应用中可能需要使用更复杂的类型来处理套接字
	queue<SSL*> clients;
};


#endif // !_DEMO_H_
